<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Flow: flow::net_flow::asio::Server_socket Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectalign">
   <div id="projectname">Flow<span id="projectnumber">&#160;2.0.0</span>
   </div>
   <div id="projectbrief">Flow project: Full implementation reference.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceflow.html">flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow.html">net_flow</a></li><li class="navelem"><a class="el" href="namespaceflow_1_1net__flow_1_1asio.html">asio</a></li><li class="navelem"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html">Server_socket</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="#related">Related Functions</a> &#124;
<a href="classflow_1_1net__flow_1_1asio_1_1Server__socket-members.html">List of all members</a>  </div>
  <div class="headertitle"><div class="title">flow::net_flow::asio::Server_socket Class Reference</div></div>
</div><!--header-->
<div class="contents">

<p>A <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html" title="A server socket able to listen on a single Flow port for incoming connections and return peer sockets...">net_flow::Server_socket</a> that adds integration with boost.asio.  
 <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flow::net_flow::asio::Server_socket:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket__inherit__graph.svg" width="575" height="264"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for flow::net_flow::asio::Server_socket:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket__coll__graph.svg" width="2508" height="2320"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-types" name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:ac7ed30d29e4ba6f344e58299ed343773"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773">Ptr</a> = boost::shared_ptr&lt; <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html">Server_socket</a> &gt;</td></tr>
<tr class="memdesc:ac7ed30d29e4ba6f344e58299ed343773"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for <code>shared_ptr</code> to <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html" title="A net_flow::Server_socket that adds integration with boost.asio.">Server_socket</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773">More...</a><br /></td></tr>
<tr class="separator:ac7ed30d29e4ba6f344e58299ed343773"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classflow_1_1net__flow_1_1Server__socket"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classflow_1_1net__flow_1_1Server__socket')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html">flow::net_flow::Server_socket</a></td></tr>
<tr class="memitem:a8bc789b851677a47d7c0a1aa0c69a997 inherit pub_types_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">enum class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997">State</a> { <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997aebae5ec546409cde4d74d99452d9cc8a">S_LISTENING</a>
, <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997aa27ca0689984ee6c6784a9265a678d42">S_CLOSING</a>
, <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997a6abcbd1be8478aa03e76aec9c540e14f">S_CLOSED</a>
 }</td></tr>
<tr class="memdesc:a8bc789b851677a47d7c0a1aa0c69a997"><td class="mdescLeft">&#160;</td><td class="mdescRight">State of a <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html" title="A server socket able to listen on a single Flow port for incoming connections and return peer sockets...">Server_socket</a>.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997">More...</a><br /></td></tr>
<tr class="separator:a8bc789b851677a47d7c0a1aa0c69a997 inherit pub_types_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bc28900b6854a425ea33a192eda8252 inherit pub_types_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a3bc28900b6854a425ea33a192eda8252">Peer_socket_ptr</a> = boost::shared_ptr&lt; <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html">Peer_socket</a> &gt;</td></tr>
<tr class="memdesc:a3bc28900b6854a425ea33a192eda8252 inherit pub_types_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc" title="Short-hand for ref-counted pointer to mutable values of type Target_type::element_type (a-la T*).">Peer_socket::Ptr</a>, but can't use that due to C++'s circular reference nonsense.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a3bc28900b6854a425ea33a192eda8252">More...</a><br /></td></tr>
<tr class="separator:a3bc28900b6854a425ea33a192eda8252 inherit pub_types_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html">flow::util::Shared_ptr_alias_holder&lt; boost::shared_ptr&lt; Server_socket &gt; &gt;</a></td></tr>
<tr class="memitem:aa4f1af88393042e60159a3a67f0accbc inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">Ptr</a> = boost::shared_ptr&lt; Server_socket &gt;</td></tr>
<tr class="memdesc:aa4f1af88393042e60159a3a67f0accbc inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for ref-counted pointer to mutable values of type <code>Target_type::element_type</code> (a-la <code>T*</code>).  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">More...</a><br /></td></tr>
<tr class="separator:aa4f1af88393042e60159a3a67f0accbc inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef7998db71c60eeb5d1e3d1a97c14886 inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aef7998db71c60eeb5d1e3d1a97c14886">Const_ptr</a> = Const_target_ptr</td></tr>
<tr class="memdesc:aef7998db71c60eeb5d1e3d1a97c14886 inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for ref-counted pointer to immutable values of type <code>Target_type::element_type</code> (a-la <code>T const *</code>).  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aef7998db71c60eeb5d1e3d1a97c14886">More...</a><br /></td></tr>
<tr class="separator:aef7998db71c60eeb5d1e3d1a97c14886 inherit pub_types_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-methods" name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a2e4fc3f1516d1e3af68eb669aace3704"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2e4fc3f1516d1e3af68eb669aace3704">~Server_socket</a> () override</td></tr>
<tr class="memdesc:a2e4fc3f1516d1e3af68eb669aace3704"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring <code>virtual</code> destructor as in superclass. See notes there.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2e4fc3f1516d1e3af68eb669aace3704">More...</a><br /></td></tr>
<tr class="separator:a2e4fc3f1516d1e3af68eb669aace3704"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a88c5b9b8fee3429f28d9f1dfbe1359c2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2">async_task_engine</a> ()</td></tr>
<tr class="memdesc:a88c5b9b8fee3429f28d9f1dfbe1359c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pointer (possibly null) for the <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">flow::util::Task_engine</a> used by any coming async I/O calls and inherited by any subsequently generated <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html" title="A net_flow::Peer_socket that adds integration with boost.asio.">Peer_socket</a> objects.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2">More...</a><br /></td></tr>
<tr class="separator:a88c5b9b8fee3429f28d9f1dfbe1359c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2ed5dee327d3bca47fd7b720718a6ff8"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2ed5dee327d3bca47fd7b720718a6ff8">async_task_engine_cref</a> () const</td></tr>
<tr class="memdesc:a2ed5dee327d3bca47fd7b720718a6ff8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Read-only version of <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2ed5dee327d3bca47fd7b720718a6ff8">More...</a><br /></td></tr>
<tr class="separator:a2ed5dee327d3bca47fd7b720718a6ff8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2353700db774bce70be0862f6b68aff1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1">set_async_task_engine</a> (<a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> *target_async_task_engine)</td></tr>
<tr class="memdesc:a2353700db774bce70be0862f6b68aff1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Overwrites the value to be returned by next <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1">More...</a><br /></td></tr>
<tr class="separator:a2353700db774bce70be0862f6b68aff1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8f374618b5d754321ac288cd6f1f50ea"><td class="memTemplParams" colspan="2">template&lt;typename Rep , typename Period , typename Handler &gt; </td></tr>
<tr class="memitem:a8f374618b5d754321ac288cd6f1f50ea"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea">async_accept</a> (const boost::chrono::duration&lt; Rep, Period &gt; &amp;max_wait, <a class="el" href="classbool.html">bool</a> reactor_pattern, const Handler &amp;on_result)</td></tr>
<tr class="memdesc:a8f374618b5d754321ac288cd6f1f50ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">boost.asio-style asynchronous version that essentially performs <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">net_flow::Server_socket::sync_accept()</a> in the background and invokes the given handler via the saved <code>Task_engine *(<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>)</code>, as if by <code>post(Task_engine&amp;)</code>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea">More...</a><br /></td></tr>
<tr class="separator:a8f374618b5d754321ac288cd6f1f50ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acfc27441490a10f4fc6bd7ae03bad35e"><td class="memTemplParams" colspan="2">template&lt;typename Handler &gt; </td></tr>
<tr class="memitem:acfc27441490a10f4fc6bd7ae03bad35e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#acfc27441490a10f4fc6bd7ae03bad35e">async_accept</a> (const Handler &amp;on_result)</td></tr>
<tr class="memdesc:acfc27441490a10f4fc6bd7ae03bad35e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <code>async_accept(duration::max(), false, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with no timeout and in normal &ndash; non-reactor-pattern &ndash; handler mode.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#acfc27441490a10f4fc6bd7ae03bad35e">More...</a><br /></td></tr>
<tr class="separator:acfc27441490a10f4fc6bd7ae03bad35e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a153ebee4658058400ed790c34dbe6394"><td class="memTemplParams" colspan="2">template&lt;typename Rep , typename Period , typename Handler &gt; </td></tr>
<tr class="memitem:a153ebee4658058400ed790c34dbe6394"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a153ebee4658058400ed790c34dbe6394">async_accept</a> (const boost::chrono::duration&lt; Rep, Period &gt; &amp;max_wait, const Handler &amp;on_result)</td></tr>
<tr class="memdesc:a153ebee4658058400ed790c34dbe6394"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <code>async_accept(max_wait, false, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with in normal &ndash; non-reactor-pattern &ndash; handler mode.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a153ebee4658058400ed790c34dbe6394">More...</a><br /></td></tr>
<tr class="separator:a153ebee4658058400ed790c34dbe6394"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04092288d62dd597fe2cec3677d4e9db"><td class="memTemplParams" colspan="2">template&lt;typename Handler &gt; </td></tr>
<tr class="memitem:a04092288d62dd597fe2cec3677d4e9db"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a04092288d62dd597fe2cec3677d4e9db">async_accept</a> (<a class="el" href="classbool.html">bool</a> reactor_pattern, const Handler &amp;on_result)</td></tr>
<tr class="memdesc:a04092288d62dd597fe2cec3677d4e9db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <code>async_accept(duration::max(), reactor_pattern, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with no timeout.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a04092288d62dd597fe2cec3677d4e9db">More...</a><br /></td></tr>
<tr class="separator:a04092288d62dd597fe2cec3677d4e9db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1net__flow_1_1Server__socket"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1net__flow_1_1Server__socket')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html">flow::net_flow::Server_socket</a></td></tr>
<tr class="memitem:acafb67ed1f81b90f3b2ab923de4e0525 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#acafb67ed1f81b90f3b2ab923de4e0525">~Server_socket</a> () override</td></tr>
<tr class="memdesc:acafb67ed1f81b90f3b2ab923de4e0525 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring <code>virtual</code> destructor. Note that deletion is to be handled exclusively via <code>shared_ptr</code>, never explicitly.  <a href="classflow_1_1net__flow_1_1Server__socket.html#acafb67ed1f81b90f3b2ab923de4e0525">More...</a><br /></td></tr>
<tr class="separator:acafb67ed1f81b90f3b2ab923de4e0525 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab2683ecde1fac2b0a79a957de1a2a8ff inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997">State</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#ab2683ecde1fac2b0a79a957de1a2a8ff">state</a> () const</td></tr>
<tr class="memdesc:ab2683ecde1fac2b0a79a957de1a2a8ff inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Current State of the socket.  <a href="classflow_1_1net__flow_1_1Server__socket.html#ab2683ecde1fac2b0a79a957de1a2a8ff">More...</a><br /></td></tr>
<tr class="separator:ab2683ecde1fac2b0a79a957de1a2a8ff inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae22e94978d59dfe23559a254349670bd inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Node.html">Node</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#ae22e94978d59dfe23559a254349670bd">node</a> () const</td></tr>
<tr class="memdesc:ae22e94978d59dfe23559a254349670bd inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">Node</a> that produced this <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html" title="A server socket able to listen on a single Flow port for incoming connections and return peer sockets...">Server_socket</a>.  <a href="classflow_1_1net__flow_1_1Server__socket.html#ae22e94978d59dfe23559a254349670bd">More...</a><br /></td></tr>
<tr class="separator:ae22e94978d59dfe23559a254349670bd inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd7b6b9c66eee2f3bbf35ac1068b1cb1 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1net__flow.html#a079d8cd87a68d1c5f04c6bce71f0061d">flow_port_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#acd7b6b9c66eee2f3bbf35ac1068b1cb1">local_port</a> () const</td></tr>
<tr class="memdesc:acd7b6b9c66eee2f3bbf35ac1068b1cb1 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">The local Flow-protocol port on which this server is or was listening.  <a href="classflow_1_1net__flow_1_1Server__socket.html#acd7b6b9c66eee2f3bbf35ac1068b1cb1">More...</a><br /></td></tr>
<tr class="separator:acd7b6b9c66eee2f3bbf35ac1068b1cb1 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aeea8554e23c8d743ca4956c772adbf24 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a3bc28900b6854a425ea33a192eda8252">Peer_socket_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24">accept</a> (<a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a> *err_code=0)</td></tr>
<tr class="memdesc:aeea8554e23c8d743ca4956c772adbf24 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Non-blocking accept: obtain socket for the least recently established not-yet-obtained peer connection on this server.  <a href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24">More...</a><br /></td></tr>
<tr class="separator:aeea8554e23c8d743ca4956c772adbf24 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02ba529163a2d50132eff7aec9d9c9b8 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memTemplParams" colspan="2">template&lt;typename Rep , typename Period &gt; </td></tr>
<tr class="memitem:a02ba529163a2d50132eff7aec9d9c9b8 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a3bc28900b6854a425ea33a192eda8252">Peer_socket_ptr</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8">sync_accept</a> (const boost::chrono::duration&lt; Rep, Period &gt; &amp;max_wait, <a class="el" href="classbool.html">bool</a> reactor_pattern=false, <a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a> *err_code=0)</td></tr>
<tr class="memdesc:a02ba529163a2d50132eff7aec9d9c9b8 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Blocking (synchronous) version of <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24" title="Non-blocking accept: obtain socket for the least recently established not-yet-obtained peer connectio...">accept()</a>.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8">More...</a><br /></td></tr>
<tr class="separator:a02ba529163a2d50132eff7aec9d9c9b8 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5bbf25d3921f6b9cbba463ef5a93d1e4 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a3bc28900b6854a425ea33a192eda8252">Peer_socket_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a5bbf25d3921f6b9cbba463ef5a93d1e4">sync_accept</a> (<a class="el" href="classbool.html">bool</a> reactor_pattern=false, <a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a> *err_code=0)</td></tr>
<tr class="memdesc:a5bbf25d3921f6b9cbba463ef5a93d1e4 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <code>sync_accept(duration::max(), reactor_pattern, err_code)</code>; i.e., <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">sync_accept()</a> with no user timeout.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a5bbf25d3921f6b9cbba463ef5a93d1e4">More...</a><br /></td></tr>
<tr class="separator:a5bbf25d3921f6b9cbba463ef5a93d1e4 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ba400221e347613c0d101b19602a3a2 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a6ba400221e347613c0d101b19602a3a2">disconnect_cause</a> () const</td></tr>
<tr class="memdesc:a6ba400221e347613c0d101b19602a3a2 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">The error code that perviously caused <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#ab2683ecde1fac2b0a79a957de1a2a8ff" title="Current State of the socket.">state()</a> to become <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997a6abcbd1be8478aa03e76aec9c540e14f" title="No accept()s are or will be possible, AND Node has disowned the Server_socket.">State::S_CLOSED</a>, or success code if state is not CLOSED.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a6ba400221e347613c0d101b19602a3a2">More...</a><br /></td></tr>
<tr class="separator:a6ba400221e347613c0d101b19602a3a2 inherit pub_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1util_1_1Null__interface"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1util_1_1Null__interface')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1util_1_1Null__interface.html">flow::util::Null_interface</a></td></tr>
<tr class="memitem:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">~Null_interface</a> ()=0</td></tr>
<tr class="memdesc:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="mdescLeft">&#160;</td><td class="mdescRight">Boring <code>virtual</code> destructor.  <a href="classflow_1_1util_1_1Null__interface.html#a5916282577627e424a09884347eddbba">More...</a><br /></td></tr>
<tr class="separator:a5916282577627e424a09884347eddbba inherit pub_methods_classflow_1_1util_1_1Null__interface"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classflow_1_1log_1_1Log__context"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classflow_1_1log_1_1Log__context')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classflow_1_1log_1_1Log__context.html">flow::log::Log_context</a></td></tr>
<tr class="memitem:ae7100d2dd130d8f130e3e64fdb1f4fd9 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#ae7100d2dd130d8f130e3e64fdb1f4fd9">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *logger=0)</td></tr>
<tr class="memdesc:ae7100d2dd130d8f130e3e64fdb1f4fd9 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a null <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a>.  <a href="classflow_1_1log_1_1Log__context.html#ae7100d2dd130d8f130e3e64fdb1f4fd9">More...</a><br /></td></tr>
<tr class="separator:ae7100d2dd130d8f130e3e64fdb1f4fd9 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af1ac7f30ab442c3c6aa6079335df6c9a inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memTemplParams" colspan="2">template&lt;typename Component_payload &gt; </td></tr>
<tr class="memitem:af1ac7f30ab442c3c6aa6079335df6c9a inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memTemplItemLeft" align="right" valign="top">&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#af1ac7f30ab442c3c6aa6079335df6c9a">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *logger, Component_payload component_payload)</td></tr>
<tr class="memdesc:af1ac7f30ab442c3c6aa6079335df6c9a inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs <a class="el" href="classflow_1_1log_1_1Log__context.html" title="Convenience class that simply stores a Logger and/or Component passed into a constructor; and returns...">Log_context</a> by storing the given pointer to a <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> and a new <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> storing the specified generically typed payload (an <code>enum</code> value).  <a href="classflow_1_1log_1_1Log__context.html#af1ac7f30ab442c3c6aa6079335df6c9a">More...</a><br /></td></tr>
<tr class="separator:af1ac7f30ab442c3c6aa6079335df6c9a inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5c57a7f44959a01ca9a1c948a6686cc0 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a5c57a7f44959a01ca9a1c948a6686cc0">Log_context</a> (const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;src)</td></tr>
<tr class="memdesc:a5c57a7f44959a01ca9a1c948a6686cc0 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Copy constructor that stores equal <code>Logger*</code> and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> values as the source.  <a href="classflow_1_1log_1_1Log__context.html#a5c57a7f44959a01ca9a1c948a6686cc0">More...</a><br /></td></tr>
<tr class="separator:a5c57a7f44959a01ca9a1c948a6686cc0 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3d4e624833d96bdafa1485ffff472509 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a3d4e624833d96bdafa1485ffff472509">Log_context</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:a3d4e624833d96bdafa1485ffff472509 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move constructor that makes this equal to <code>src</code>, while the latter becomes as-if default-constructed.  <a href="classflow_1_1log_1_1Log__context.html#a3d4e624833d96bdafa1485ffff472509">More...</a><br /></td></tr>
<tr class="separator:a3d4e624833d96bdafa1485ffff472509 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5d628315d5a93908d47a281980d3113e inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e">operator=</a> (const <a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;src)</td></tr>
<tr class="memdesc:a5d628315d5a93908d47a281980d3113e inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Assignment operator that behaves similarly to the copy constructor.  <a href="classflow_1_1log_1_1Log__context.html#a5d628315d5a93908d47a281980d3113e">More...</a><br /></td></tr>
<tr class="separator:a5d628315d5a93908d47a281980d3113e inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aae857197aecba8606c32296bc7bec308 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#aae857197aecba8606c32296bc7bec308">operator=</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;&amp;src)</td></tr>
<tr class="memdesc:aae857197aecba8606c32296bc7bec308 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Move assignment operator that behaves similarly to the move constructor.  <a href="classflow_1_1log_1_1Log__context.html#aae857197aecba8606c32296bc7bec308">More...</a><br /></td></tr>
<tr class="separator:aae857197aecba8606c32296bc7bec308 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa6bb8e4250586425631ef80063caf155 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#aa6bb8e4250586425631ef80063caf155">swap</a> (<a class="el" href="classflow_1_1log_1_1Log__context.html">Log_context</a> &amp;other)</td></tr>
<tr class="memdesc:aa6bb8e4250586425631ef80063caf155 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Swaps <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointers and <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> objects held by <code>*this</code> and <code>other</code>.  <a href="classflow_1_1log_1_1Log__context.html#aa6bb8e4250586425631ef80063caf155">More...</a><br /></td></tr>
<tr class="separator:aa6bb8e4250586425631ef80063caf155 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af4db395042b065b00398cd59845dcb4d inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1log_1_1Logger.html">Logger</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">get_logger</a> () const</td></tr>
<tr class="memdesc:af4db395042b065b00398cd59845dcb4d inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the stored <a class="el" href="classflow_1_1log_1_1Logger.html" title="Interface that the user should implement, passing the implementing Logger into logging classes (Flow&#39;...">Logger</a> pointer, particularly as many <code>FLOW_LOG_*()</code> macros expect.  <a href="classflow_1_1log_1_1Log__context.html#af4db395042b065b00398cd59845dcb4d">More...</a><br /></td></tr>
<tr class="separator:af4db395042b065b00398cd59845dcb4d inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a5fef42dc2cedf3c0d1a6e83beb2948 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classflow_1_1log_1_1Component.html">Component</a> &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948">get_log_component</a> () const</td></tr>
<tr class="memdesc:a8a5fef42dc2cedf3c0d1a6e83beb2948 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns reference to the stored <a class="el" href="classflow_1_1log_1_1Component.html" title="A light-weight class, each object storing a component payload encoding an enum value from enum type o...">Component</a> object, particularly as many <code>FLOW_LOG_*()</code> macros expect.  <a href="classflow_1_1log_1_1Log__context.html#a8a5fef42dc2cedf3c0d1a6e83beb2948">More...</a><br /></td></tr>
<tr class="separator:a8a5fef42dc2cedf3c0d1a6e83beb2948 inherit pub_methods_classflow_1_1log_1_1Log__context"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pub-static-methods" name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:a5f28c0b6770b68994aa95ae5df50afc2"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773">Ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a5f28c0b6770b68994aa95ae5df50afc2">cast</a> (<a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">net_flow::Server_socket::Ptr</a> serv)</td></tr>
<tr class="memdesc:a5f28c0b6770b68994aa95ae5df50afc2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Convenience method that polymorphically casts from <code><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc" title="Short-hand for ref-counted pointer to mutable values of type Target_type::element_type (a-la T*).">net_flow::Server_socket::Ptr</a></code> to subclass pointer <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773" title="Short-hand for shared_ptr to Server_socket.">net_flow::asio::Server_socket::Ptr</a></code>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a5f28c0b6770b68994aa95ae5df50afc2">More...</a><br /></td></tr>
<tr class="separator:a5f28c0b6770b68994aa95ae5df50afc2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td colspan="2" onclick="javascript:toggleInherit('pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder')"><img src="closed.png" alt="-"/>&#160;Static Public Member Functions inherited from <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html">flow::util::Shared_ptr_alias_holder&lt; boost::shared_ptr&lt; Server_socket &gt; &gt;</a></td></tr>
<tr class="memitem:a55a247bb8fb2ec94b7cbfdd56be65a81 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">Ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a55a247bb8fb2ec94b7cbfdd56be65a81">ptr_cast</a> (const From_ptr &amp;ptr_to_cast)</td></tr>
<tr class="memdesc:a55a247bb8fb2ec94b7cbfdd56be65a81 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Provides syntactic-sugary way to perform a <code>static_pointer_cast&lt;&gt;</code> from a compatible smart pointer type <code>From_ptr</code>, typically <code>From_ptr::element_type</code> being in the same class hierarchy as <code>Target_ptr::element_type</code>.  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a55a247bb8fb2ec94b7cbfdd56be65a81">More...</a><br /></td></tr>
<tr class="separator:a55a247bb8fb2ec94b7cbfdd56be65a81 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a520b351b1463e585e278c8c7241b8fc8 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aef7998db71c60eeb5d1e3d1a97c14886">Const_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a520b351b1463e585e278c8c7241b8fc8">const_ptr_cast</a> (const From_ptr &amp;ptr_to_cast)</td></tr>
<tr class="memdesc:a520b351b1463e585e278c8c7241b8fc8 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a55a247bb8fb2ec94b7cbfdd56be65a81" title="Provides syntactic-sugary way to perform a static_pointer_cast&lt;&gt; from a compatible smart pointer type...">ptr_cast()</a> but adds <code>const</code>-ness (immutability) to the pointed-to type.  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a520b351b1463e585e278c8c7241b8fc8">More...</a><br /></td></tr>
<tr class="separator:a520b351b1463e585e278c8c7241b8fc8 inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac242f13a290877e84e44165e00a5905c inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">Ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#ac242f13a290877e84e44165e00a5905c">dynamic_ptr_cast</a> (const From_ptr &amp;ptr_to_cast)</td></tr>
<tr class="memdesc:ac242f13a290877e84e44165e00a5905c inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Equivalent to <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a55a247bb8fb2ec94b7cbfdd56be65a81" title="Provides syntactic-sugary way to perform a static_pointer_cast&lt;&gt; from a compatible smart pointer type...">ptr_cast()</a> but a <code>dynamic_pointer_cast</code> instead of static.  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#ac242f13a290877e84e44165e00a5905c">More...</a><br /></td></tr>
<tr class="separator:ac242f13a290877e84e44165e00a5905c inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a013713e08c6537f91d6bdba29fcccdff inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aef7998db71c60eeb5d1e3d1a97c14886">Const_ptr</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a013713e08c6537f91d6bdba29fcccdff">dynamic_const_ptr_cast</a> (const From_ptr &amp;ptr_to_cast)</td></tr>
<tr class="memdesc:a013713e08c6537f91d6bdba29fcccdff inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="mdescLeft">&#160;</td><td class="mdescRight">Identical to <a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a520b351b1463e585e278c8c7241b8fc8" title="Identical to ptr_cast() but adds const-ness (immutability) to the pointed-to type.">const_ptr_cast()</a> but a <code>dynamic_pointer_cast</code> instead of static.  <a href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#a013713e08c6537f91d6bdba29fcccdff">More...</a><br /></td></tr>
<tr class="separator:a013713e08c6537f91d6bdba29fcccdff inherit pub_static_methods_classflow_1_1util_1_1Shared__ptr__alias__holder"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-types" name="pri-types"></a>
Private Types</h2></td></tr>
<tr class="memitem:ad1781485abf0d98d470863089a0a9b6c"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">Handler_func</a> = <a class="el" href="classflow_1_1Function.html">Function</a>&lt; void(const <a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a> &amp;err_code, <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html#a3ee868ebd8acd1788a5bed8cf66a349e">Peer_socket::Ptr</a> new_sock)&gt;</td></tr>
<tr class="memdesc:ad1781485abf0d98d470863089a0a9b6c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Short-hand for the <code>Task_engine</code>-compatible accept <code>Handler</code> concrete type for class-internal code.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">More...</a><br /></td></tr>
<tr class="separator:ad1781485abf0d98d470863089a0a9b6c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-methods" name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:a201bb6012ddffe83f9a1a3daf5e78645"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a201bb6012ddffe83f9a1a3daf5e78645">Server_socket</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">log::Logger</a> *logger, const <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__options.html">Peer_socket_options</a> *child_sock_opts)</td></tr>
<tr class="memdesc:a201bb6012ddffe83f9a1a3daf5e78645"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs object.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a201bb6012ddffe83f9a1a3daf5e78645">More...</a><br /></td></tr>
<tr class="separator:a201bb6012ddffe83f9a1a3daf5e78645"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a01233841b5cde6b22a2ae2481c14c51b"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a01233841b5cde6b22a2ae2481c14c51b">async_accept_impl</a> (<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">Handler_func</a> &amp;&amp;on_result, const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;wait_until, <a class="el" href="classbool.html">bool</a> reactor_pattern)</td></tr>
<tr class="memdesc:a01233841b5cde6b22a2ae2481c14c51b"><td class="mdescLeft">&#160;</td><td class="mdescRight">De-templated implementation of all <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> methods.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a01233841b5cde6b22a2ae2481c14c51b">More...</a><br /></td></tr>
<tr class="separator:a01233841b5cde6b22a2ae2481c14c51b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abcc92483255a34998be78cfd228555a1"><td class="memTemplParams" colspan="2">template&lt;typename Handler &gt; </td></tr>
<tr class="memitem:abcc92483255a34998be78cfd228555a1"><td class="memTemplItemLeft" align="right" valign="top"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">Handler_func</a>&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#abcc92483255a34998be78cfd228555a1">handler_func</a> (Handler &amp;&amp;on_result)</td></tr>
<tr class="memdesc:abcc92483255a34998be78cfd228555a1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns a functor that essentially performs <code>post()</code> <code>on_result</code> onto <code>*async_task_engine()</code> in a way suitable for a boost.asio-compatible async-op.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#abcc92483255a34998be78cfd228555a1">More...</a><br /></td></tr>
<tr class="separator:abcc92483255a34998be78cfd228555a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="pri-attribs" name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:ae236d96a176b209b217f04bb94119efe"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ae236d96a176b209b217f04bb94119efe">m_target_task_engine</a></td></tr>
<tr class="memdesc:ae236d96a176b209b217f04bb94119efe"><td class="mdescLeft">&#160;</td><td class="mdescRight">See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ae236d96a176b209b217f04bb94119efe">More...</a><br /></td></tr>
<tr class="separator:ae236d96a176b209b217f04bb94119efe"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="friends" name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a6db9d28bd448a131448276ee03de1e6d"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a6db9d28bd448a131448276ee03de1e6d">Node</a></td></tr>
<tr class="memdesc:a6db9d28bd448a131448276ee03de1e6d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Similarly to the equivalent <code>friend</code> in <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">net_flow::Peer_socket</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a6db9d28bd448a131448276ee03de1e6d">More...</a><br /></td></tr>
<tr class="separator:a6db9d28bd448a131448276ee03de1e6d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa929c4c93d814d46bf195c874af63fee"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#aa929c4c93d814d46bf195c874af63fee">net_flow::Node</a></td></tr>
<tr class="memdesc:aa929c4c93d814d46bf195c874af63fee"><td class="mdescLeft">&#160;</td><td class="mdescRight">As of this writing, it is needed for <a class="el" href="classflow_1_1net__flow_1_1Node.html#ab330b19f4039bab074251111789b568a" title="Like sock_create_forward_plus_ctor_args() but for Server_sockets.">Node::serv_create_forward_plus_ctor_args()</a>.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#aa929c4c93d814d46bf195c874af63fee">More...</a><br /></td></tr>
<tr class="separator:aa929c4c93d814d46bf195c874af63fee"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="related" name="related"></a>
Related Functions</h2></td></tr>
<tr><td class="ititle" colspan="2"><p >(Note that these are not member functions.) </p>
</td></tr>
<tr class="memitem:acbbe4fae58626a54fabdcd4bcdfdb011"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#acbbe4fae58626a54fabdcd4bcdfdb011">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html">Server_socket</a> *serv)</td></tr>
<tr class="memdesc:acbbe4fae58626a54fabdcd4bcdfdb011"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of given socket to given standard <code>ostream</code> and returns the latter.  <a href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#acbbe4fae58626a54fabdcd4bcdfdb011">More...</a><br /></td></tr>
<tr class="separator:acbbe4fae58626a54fabdcd4bcdfdb011"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header related_classflow_1_1net__flow_1_1Server__socket"><td colspan="2" onclick="javascript:toggleInherit('related_classflow_1_1net__flow_1_1Server__socket')"><img src="closed.png" alt="-"/>&#160;Related Functions inherited from <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html">flow::net_flow::Server_socket</a></td></tr>
<tr class="memitem:acbbe4fae58626a54fabdcd4bcdfdb011 inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#acbbe4fae58626a54fabdcd4bcdfdb011">operator&lt;&lt;</a> (std::ostream &amp;os, const <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html">Server_socket</a> *serv)</td></tr>
<tr class="memdesc:acbbe4fae58626a54fabdcd4bcdfdb011 inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of given socket to given standard <code>ostream</code> and returns the latter.  <a href="classflow_1_1net__flow_1_1Server__socket.html#acbbe4fae58626a54fabdcd4bcdfdb011">More...</a><br /></td></tr>
<tr class="separator:acbbe4fae58626a54fabdcd4bcdfdb011 inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a48bc8803c67e75b955a1f2778a8ad2bf inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">std::ostream &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a48bc8803c67e75b955a1f2778a8ad2bf">operator&lt;&lt;</a> (std::ostream &amp;os, <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a8bc789b851677a47d7c0a1aa0c69a997">Server_socket::State</a> <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#ab2683ecde1fac2b0a79a957de1a2a8ff">state</a>)</td></tr>
<tr class="memdesc:a48bc8803c67e75b955a1f2778a8ad2bf inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Prints string representation of given socket state to given standard <code>ostream</code> and returns the latter.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a48bc8803c67e75b955a1f2778a8ad2bf">More...</a><br /></td></tr>
<tr class="separator:a48bc8803c67e75b955a1f2778a8ad2bf inherit related_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a id="inherited" name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pro_methods_classflow_1_1net__flow_1_1Server__socket"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classflow_1_1net__flow_1_1Server__socket')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html">flow::net_flow::Server_socket</a></td></tr>
<tr class="memitem:a1f48a72439665d8754549f11a4f4c7bb inherit pro_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a1f48a72439665d8754549f11a4f4c7bb">Server_socket</a> (<a class="el" href="classflow_1_1log_1_1Logger.html">log::Logger</a> *logger, const <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__options.html">Peer_socket_options</a> *child_sock_opts)</td></tr>
<tr class="memdesc:a1f48a72439665d8754549f11a4f4c7bb inherit pro_methods_classflow_1_1net__flow_1_1Server__socket"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructs object; initializes most values to well-defined (0, empty, etc.) but not necessarily meaningful values.  <a href="classflow_1_1net__flow_1_1Server__socket.html#a1f48a72439665d8754549f11a4f4c7bb">More...</a><br /></td></tr>
<tr class="separator:a1f48a72439665d8754549f11a4f4c7bb inherit pro_methods_classflow_1_1net__flow_1_1Server__socket"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p >A <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html" title="A server socket able to listen on a single Flow port for incoming connections and return peer sockets...">net_flow::Server_socket</a> that adds integration with boost.asio. </p>
<p >See <a class="el" href="classflow_1_1net__flow_1_1Node.html" title="An object of this class is a single Flow-protocol networking node, in the sense that: (1) it has a di...">net_flow::Node</a> for a discussion of the topic of boost.asio integration. A <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html" title="A net_flow::Server_socket that adds integration with boost.asio.">net_flow::asio::Server_socket</a> <em>is</em> a <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html" title="A server socket able to listen on a single Flow port for incoming connections and return peer sockets...">net_flow::Server_socket</a> with all that functionality, plus APIs (mainly <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>) that accomplish boost.asio-style asynchronous operations with a standard <code>boost::asio::io_context</code>.</p>
<p >As of this writing, <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773" title="Short-hand for shared_ptr to Server_socket.">asio::Server_socket::Ptr</a></code>s are generated by <code><a class="el" href="classflow_1_1net__flow_1_1Node.html#a3c2cd6a6c328a2d5381308258d35d95d" title="Sets up a server on the given local Flow port and returns Server_socket which can be used to accept s...">net_flow::Node::listen()</a></code> and any derivatives. The underlying <code>io_context</code> (a/k/a <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">flow::util::Task_engine</a>) is carried forward from the <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Node.html" title="A subclass of net_flow::Node that adds the ability to easily and directly use net_flow sockets in gen...">net_flow::asio::Node</a></code> factory object that generated and returned the <code>Ptr</code>. It can be overwritten via <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a>. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00038">38</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="ad1781485abf0d98d470863089a0a9b6c" name="ad1781485abf0d98d470863089a0a9b6c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad1781485abf0d98d470863089a0a9b6c">&#9670;&nbsp;</a></span>Handler_func</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">flow::net_flow::asio::Server_socket::Handler_func</a> =  <a class="el" href="classflow_1_1Function.html">Function</a>&lt;void (const <a class="el" href="namespaceflow.html#a29eaaa9d0fac4ce87d8b969222dbed09">Error_code</a>&amp; err_code, <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html#a3ee868ebd8acd1788a5bed8cf66a349e">Peer_socket::Ptr</a> new_sock)&gt;</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Short-hand for the <code>Task_engine</code>-compatible accept <code>Handler</code> concrete type for class-internal code. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00204">204</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

</div>
</div>
<a id="ac7ed30d29e4ba6f344e58299ed343773" name="ac7ed30d29e4ba6f344e58299ed343773"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac7ed30d29e4ba6f344e58299ed343773">&#9670;&nbsp;</a></span>Ptr</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773">flow::net_flow::asio::Server_socket::Ptr</a> =  boost::shared_ptr&lt;<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html">Server_socket</a>&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Short-hand for <code>shared_ptr</code> to <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html" title="A net_flow::Server_socket that adds integration with boost.asio.">Server_socket</a>. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00046">46</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a2e4fc3f1516d1e3af68eb669aace3704" name="a2e4fc3f1516d1e3af68eb669aace3704"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2e4fc3f1516d1e3af68eb669aace3704">&#9670;&nbsp;</a></span>~Server_socket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::net_flow::asio::Server_socket::~Server_socket </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Boring <code>virtual</code> destructor as in superclass. See notes there. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00036">36</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l00227">FLOW_LOG_TRACE</a>.</p>

</div>
</div>
<a id="a201bb6012ddffe83f9a1a3daf5e78645" name="a201bb6012ddffe83f9a1a3daf5e78645"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a201bb6012ddffe83f9a1a3daf5e78645">&#9670;&nbsp;</a></span>Server_socket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flow::net_flow::asio::Server_socket::Server_socket </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1log_1_1Logger.html">log::Logger</a> *&#160;</td>
          <td class="paramname"><em>logger</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="structflow_1_1net__flow_1_1Peer__socket__options.html">Peer_socket_options</a> *&#160;</td>
          <td class="paramname"><em>child_sock_opts</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">explicit</span><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Constructs object. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">logger</td><td>See superclass. </td></tr>
    <tr><td class="paramname">child_sock_opts</td><td>See superclass. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00028">28</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l00227">FLOW_LOG_TRACE</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a201bb6012ddffe83f9a1a3daf5e78645_icgraph.svg" width="550" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a04092288d62dd597fe2cec3677d4e9db" name="a04092288d62dd597fe2cec3677d4e9db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a04092288d62dd597fe2cec3677d4e9db">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[1/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::async_accept </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>reactor_pattern</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Handler &amp;&#160;</td>
          <td class="paramname"><em>on_result</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to <code>async_accept(duration::max(), reactor_pattern, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with no timeout. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Handler</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
    <tr><td class="paramname">reactor_pattern</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00276">276</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a04092288d62dd597fe2cec3677d4e9db_cgraph.svg" width="570" height="300"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a8f374618b5d754321ac288cd6f1f50ea" name="a8f374618b5d754321ac288cd6f1f50ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a8f374618b5d754321ac288cd6f1f50ea">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[2/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Rep , typename Period , typename Handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::async_accept </td>
          <td>(</td>
          <td class="paramtype">const boost::chrono::duration&lt; Rep, Period &gt; &amp;&#160;</td>
          <td class="paramname"><em>max_wait</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>reactor_pattern</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Handler &amp;&#160;</td>
          <td class="paramname"><em>on_result</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>boost.asio-style asynchronous version that essentially performs <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">net_flow::Server_socket::sync_accept()</a> in the background and invokes the given handler via the saved <code>Task_engine *(<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>)</code>, as if by <code>post(Task_engine&amp;)</code>. </p>
<p >The semantics are identical to the similar <code><a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">sync_accept()</a></code>, except that the operation does not block the calling thread; and the results are delivered to the supplied handler <code>on_result</code> instead of to the caller.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Rep</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24" title="Non-blocking accept: obtain socket for the least recently established not-yet-obtained peer connectio...">net_flow::Server_socket::accept()</a>. </td></tr>
    <tr><td class="paramname">Period</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24" title="Non-blocking accept: obtain socket for the least recently established not-yet-obtained peer connectio...">net_flow::Server_socket::accept()</a>. </td></tr>
    <tr><td class="paramname">Handler</td><td>A type such that if <code>Handler h</code>, then a function equivalent to <code>{ h(err_code, sock); }</code> can be <code>post()</code>ed onto an <code>Task_engine</code>, with <code>const Error_code&amp; err_code</code> and <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html" title="A net_flow::Peer_socket that adds integration with boost.asio.">net_flow::asio::Peer_socket</a> sock</code>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td>Handler to be executed asynchronously within the saved <code>Task_engine</code>. The error code and socket values passed to it, in that order, are identical to those out-arg/returned values in <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">net_flow::Server_socket::sync_accept()</a>. Note: Use <code>bind_executor(S, F)</code> to bind your handler to the <a class="el" href="namespaceflow_1_1util.html#aa59354ab408e978c8a7bda1a4706924e" title="Short-hand for boost.asio strand, an ancillary class that works with Task_engine for advanced task sc...">util::Strand</a> <code>S</code>. </td></tr>
    <tr><td class="paramname">reactor_pattern</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">net_flow::Server_socket::sync_accept()</a>. </td></tr>
    <tr><td class="paramname">max_wait</td><td>See <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">net_flow::Server_socket::sync_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00260">260</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>, and <a class="el" href="util_2detail_2util_8hpp_source.html#l00042">flow::util::chrono_duration_from_now_to_fine_time_pt()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a8f374618b5d754321ac288cd6f1f50ea_cgraph.svg" width="570" height="300"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a153ebee4658058400ed790c34dbe6394" name="a153ebee4658058400ed790c34dbe6394"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a153ebee4658058400ed790c34dbe6394">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[3/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Rep , typename Period , typename Handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::async_accept </td>
          <td>(</td>
          <td class="paramtype">const boost::chrono::duration&lt; Rep, Period &gt; &amp;&#160;</td>
          <td class="paramname"><em>max_wait</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const Handler &amp;&#160;</td>
          <td class="paramname"><em>on_result</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to <code>async_accept(max_wait, false, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with in normal &ndash; non-reactor-pattern &ndash; handler mode. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Handler</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
    <tr><td class="paramname">max_wait</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00282">282</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>, and <a class="el" href="util_2detail_2util_8hpp_source.html#l00042">flow::util::chrono_duration_from_now_to_fine_time_pt()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a153ebee4658058400ed790c34dbe6394_cgraph.svg" width="570" height="300"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="acfc27441490a10f4fc6bd7ae03bad35e" name="acfc27441490a10f4fc6bd7ae03bad35e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acfc27441490a10f4fc6bd7ae03bad35e">&#9670;&nbsp;</a></span>async_accept() <span class="overload">[4/4]</span></h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Handler &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::async_accept </td>
          <td>(</td>
          <td class="paramtype">const Handler &amp;&#160;</td>
          <td class="paramname"><em>on_result</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Equivalent to <code>async_accept(duration::max(), false, on_result)</code>; i.e., <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> with no timeout and in normal &ndash; non-reactor-pattern &ndash; handler mode. </p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Handler</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td>See other <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00270">270</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_acfc27441490a10f4fc6bd7ae03bad35e_cgraph.svg" width="570" height="300"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a01233841b5cde6b22a2ae2481c14c51b" name="a01233841b5cde6b22a2ae2481c14c51b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a01233841b5cde6b22a2ae2481c14c51b">&#9670;&nbsp;</a></span>async_accept_impl()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::async_accept_impl </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">Handler_func</a> &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_result</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespaceflow.html#a9d9cc2eeb10d398cff5591d446b763b8">Fine_time_pt</a> &amp;&#160;</td>
          <td class="paramname"><em>wait_until</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classbool.html">bool</a>&#160;</td>
          <td class="paramname"><em>reactor_pattern</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>De-templated implementation of all <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> methods. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td><code>handler_func(on_result)</code>, where <code>on_result</code> is the user's <code>async_*()</code> method arg. </td></tr>
    <tr><td class="paramname">wait_until</td><td>See <code>max_wait</code> arg on the originating <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> method. This is absolute timeout time point derived from it; zero-valued if no timeout. </td></tr>
    <tr><td class="paramname">reactor_pattern</td><td>See <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">60</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2peer__socket_8cpp_source.html#l00152">flow::net_flow::asio::Peer_socket::cast()</a>, <a class="el" href="asio_2server__socket_8cpp_source.html#l00107">cast()</a>, <a class="el" href="server__socket_8cpp_source.html#l00064">flow::net_flow::Server_socket::disconnect_cause()</a>, <a class="el" href="log_8hpp_source.html#l00152">FLOW_LOG_WARNING</a>, <a class="el" href="asio_2server__socket_8hpp_source.html#l00252">m_target_task_engine</a>, <a class="el" href="server__socket_8cpp_source.html#l00058">flow::net_flow::Server_socket::node()</a>, <a class="el" href="classflow_1_1net__flow_1_1Event__set.html#a19cc3a286c8a11c986d2a59ec1e39a71afb218b0110d3f9f26ee089bad2e0eba2">flow::net_flow::Event_set::S_SERVER_SOCKET_ACCEPTABLE</a>, and <a class="el" href="asio_2server__socket_8cpp_source.html#l00028">Server_socket()</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8hpp_source.html#l00260">async_accept()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a01233841b5cde6b22a2ae2481c14c51b_cgraph.svg" width="375" height="300"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a01233841b5cde6b22a2ae2481c14c51b_icgraph.svg" width="352" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a88c5b9b8fee3429f28d9f1dfbe1359c2" name="a88c5b9b8fee3429f28d9f1dfbe1359c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a88c5b9b8fee3429f28d9f1dfbe1359c2">&#9670;&nbsp;</a></span>async_task_engine()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> * flow::net_flow::asio::Server_socket::async_task_engine </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Pointer (possibly null) for the <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4" title="Short-hand for boost.asio event service, the central class of boost.asio.">flow::util::Task_engine</a> used by any coming async I/O calls and inherited by any subsequently generated <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html" title="A net_flow::Peer_socket that adds integration with boost.asio.">Peer_socket</a> objects. </p>
<p >One, this is used by <code>this-&gt;<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a></code> I/O calls, both synchronously and during the async phases of such calls, whenever placing a user-supplied handler routine onto an <code>Task_engine</code>. Whatever <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> returns at that time is the <code>Task_engine</code> used.</p>
<p >Two, when <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#a02ba529163a2d50132eff7aec9d9c9b8" title="Blocking (synchronous) version of accept().">sync_accept()</a> creates <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html" title="A net_flow::Peer_socket that adds integration with boost.asio.">Peer_socket</a>, at that moment this is used. Hence, the initial value returned by <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html#a1c63aaece6a9b056688a35405f064c70" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async_*() I/O calls.">Peer_socket::async_task_engine()</a> is thus inherited from the factory <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html" title="A net_flow::Server_socket that adds integration with boost.asio.">Server_socket</a>'s <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> result.</p>
<h3>Thread safety (operating on a given <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Node.html" title="A subclass of net_flow::Node that adds the ability to easily and directly use net_flow sockets in gen...">Node</a>)</h3>
<ul>
<li><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a> is the only way to change the returned value, upon construction.</li>
<li>It is not safe to call <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a> at the same time as <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>.</li>
<li>Define "any async op" as <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">Server_socket::async_accept()</a> and all its variants, including actions it takes in the background (asynchronously).<ul>
<li><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> must return the same value &ndash; and <em>not</em> null &ndash; throughout "any async op."</li>
</ul>
</li>
<li>Define "any async inheriting op" as any (non-blocking) <a class="el" href="classflow_1_1net__flow_1_1Server__socket.html#aeea8554e23c8d743ca4956c772adbf24" title="Non-blocking accept: obtain socket for the least recently established not-yet-obtained peer connectio...">Server_socket::accept()</a> method (which creates a <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html" title="A net_flow::Peer_socket that adds integration with boost.asio.">Peer_socket</a>.<ul>
<li><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> must return the same value &ndash; possibly null &ndash; throughout "any async inheriting op."</li>
</ul>
</li>
<li>Put simply, a null <code>Task_engine</code> can be inherited by a generated socket, but a null cannot be used when performing an async op. Furthermore, <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a> is unsafe through any of those and through <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> itself.</li>
</ul>
<p >Informal tip: Typically you'd never call <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a>, hence there is no problem. If you DO need to call it, even then normally it's easy to ensure one does this before any actual async calls are made. Trouble only begins if one calls <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a2353700db774bce70be0862f6b68aff1" title="Overwrites the value to be returned by next async_task_engine().">set_async_task_engine()</a> "in the middle" of operating the socket. There is no way to add outside locking to make that work, either, due to async "tails" of some calls.</p>
<dl class="section return"><dt>Returns</dt><dd>Null or non-null pointer to <code>Task_engine</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00041">41</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8hpp_source.html#l00252">m_target_task_engine</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8hpp_source.html#l00291">handler_func()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a88c5b9b8fee3429f28d9f1dfbe1359c2_icgraph.svg" width="391" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a2ed5dee327d3bca47fd7b720718a6ff8" name="a2ed5dee327d3bca47fd7b720718a6ff8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2ed5dee327d3bca47fd7b720718a6ff8">&#9670;&nbsp;</a></span>async_task_engine_cref()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const <a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> &amp; flow::net_flow::asio::Server_socket::async_task_engine_cref </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Read-only version of <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>. </p>
<dl class="section return"><dt>Returns</dt><dd>Reference to read-only <code>*(<a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>)</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00047">47</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8hpp_source.html#l00252">m_target_task_engine</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8cpp_source.html#l00128">operator&lt;&lt;()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a2ed5dee327d3bca47fd7b720718a6ff8_icgraph.svg" width="384" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a5f28c0b6770b68994aa95ae5df50afc2" name="a5f28c0b6770b68994aa95ae5df50afc2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5f28c0b6770b68994aa95ae5df50afc2">&#9670;&nbsp;</a></span>cast()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773">Server_socket::Ptr</a> flow::net_flow::asio::Server_socket::cast </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc">net_flow::Server_socket::Ptr</a>&#160;</td>
          <td class="paramname"><em>serv</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Convenience method that polymorphically casts from <code><a class="el" href="classflow_1_1util_1_1Shared__ptr__alias__holder.html#aa4f1af88393042e60159a3a67f0accbc" title="Short-hand for ref-counted pointer to mutable values of type Target_type::element_type (a-la T*).">net_flow::Server_socket::Ptr</a></code> to subclass pointer <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773" title="Short-hand for shared_ptr to Server_socket.">net_flow::asio::Server_socket::Ptr</a></code>. </p>
<p >Behavior undefined if <code>serv</code> is not actually of the latter type. With this, one needn't do verbose <code>static_[pointer_]cast&lt;&gt;</code> or similar conversions. For example: <code>auto serv = <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a5f28c0b6770b68994aa95ae5df50afc2" title="Convenience method that polymorphically casts from net_flow::Server_socket::Ptr to subclass pointer n...">asio::Server_socket::cast</a>(node.listen(...));</code> where <code>node</code> is a <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Node.html" title="A subclass of net_flow::Node that adds the ability to easily and directly use net_flow sockets in gen...">net_flow::asio::Node</a>&amp;</code>, and <code>serv</code> is auto-typed as <code><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ac7ed30d29e4ba6f344e58299ed343773" title="Short-hand for shared_ptr to Server_socket.">net_flow::asio::Server_socket::Ptr</a></code>.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">serv</td><td>Handle to a <code>serv</code> such that the true underlying concrete type is <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html" title="A net_flow::Server_socket that adds integration with boost.asio.">net_flow::asio::Server_socket</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>See above. </dd></dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00107">107</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a5f28c0b6770b68994aa95ae5df50afc2_icgraph.svg" width="538" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="abcc92483255a34998be78cfd228555a1" name="abcc92483255a34998be78cfd228555a1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abcc92483255a34998be78cfd228555a1">&#9670;&nbsp;</a></span>handler_func()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Handler &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#ad1781485abf0d98d470863089a0a9b6c">Server_socket::Handler_func</a> flow::net_flow::asio::Server_socket::handler_func </td>
          <td>(</td>
          <td class="paramtype">Handler &amp;&amp;&#160;</td>
          <td class="paramname"><em>on_result</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns a functor that essentially performs <code>post()</code> <code>on_result</code> onto <code>*async_task_engine()</code> in a way suitable for a boost.asio-compatible async-op. </p>
<h3>Rationale</h3>
<p >See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Peer__socket.html#aa727c33c3eeeb217d50fcd451096ded8" title="Returns a functor that essentially performs post() on_result onto *async_task_engine() in a way suita...">asio::Peer_socket::handler_func()</a>.</p>
<dl class="tparams"><dt>Template Parameters</dt><dd>
  <table class="tparams">
    <tr><td class="paramname">Handler</td><td>See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">on_result</td><td>See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a8f374618b5d754321ac288cd6f1f50ea" title="boost.asio-style asynchronous version that essentially performs net_flow::Server_socket::sync_accept(...">async_accept()</a>. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="classflow_1_1Function.html">Function</a> to call from any context that will properly <code>post()</code> <code>on_result();</code> onto <code>*async_task_engine()</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00291">291</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00041">async_task_engine()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_abcc92483255a34998be78cfd228555a1_cgraph.svg" width="391" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<a id="a2353700db774bce70be0862f6b68aff1" name="a2353700db774bce70be0862f6b68aff1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2353700db774bce70be0862f6b68aff1">&#9670;&nbsp;</a></span>set_async_task_engine()</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void flow::net_flow::asio::Server_socket::set_async_task_engine </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a> *&#160;</td>
          <td class="paramname"><em>target_async_task_engine</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Overwrites the value to be returned by next <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>. </p>
<p >See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a> doc header before using this.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">target_async_task_engine</td><td>See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>. </td></tr>
  </table>
  </dd>
</dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00052">52</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="log_8hpp_source.html#l00197">FLOW_LOG_INFO</a>, and <a class="el" href="asio_2server__socket_8hpp_source.html#l00252">m_target_task_engine</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8cpp_source.html#l00115">flow::net_flow::asio::Node::serv_create()</a>.</p>
<div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_a2353700db774bce70be0862f6b68aff1_icgraph.svg" width="320" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="aa929c4c93d814d46bf195c874af63fee" name="aa929c4c93d814d46bf195c874af63fee"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa929c4c93d814d46bf195c874af63fee">&#9670;&nbsp;</a></span>net_flow::Node</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">friend class <a class="el" href="classflow_1_1net__flow_1_1Node.html">net_flow::Node</a></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>As of this writing, it is needed for <a class="el" href="classflow_1_1net__flow_1_1Node.html#ab330b19f4039bab074251111789b568a" title="Like sock_create_forward_plus_ctor_args() but for Server_sockets.">Node::serv_create_forward_plus_ctor_args()</a>. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00199">199</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

</div>
</div>
<a id="a6db9d28bd448a131448276ee03de1e6d" name="a6db9d28bd448a131448276ee03de1e6d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6db9d28bd448a131448276ee03de1e6d">&#9670;&nbsp;</a></span>Node</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">friend class <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Node.html">Node</a></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Similarly to the equivalent <code>friend</code> in <a class="el" href="classflow_1_1net__flow_1_1Peer__socket.html" title="A peer (non-server) socket operating over the Flow network protocol, with optional stream-of-bytes an...">net_flow::Peer_socket</a>. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00197">197</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

</div>
</div>
<a id="acbbe4fae58626a54fabdcd4bcdfdb011" name="acbbe4fae58626a54fabdcd4bcdfdb011"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acbbe4fae58626a54fabdcd4bcdfdb011">&#9670;&nbsp;</a></span>operator&lt;&lt;()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::ostream &amp; operator&lt;&lt; </td>
          <td>(</td>
          <td class="paramtype">std::ostream &amp;&#160;</td>
          <td class="paramname"><em>os</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html">Server_socket</a> *&#160;</td>
          <td class="paramname"><em>serv</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">related</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Prints string representation of given socket to given standard <code>ostream</code> and returns the latter. </p>
<p >The representation includes the local and remote endpoints and the hex pointer value.</p>
<dl class="section note"><dt>Note</dt><dd><code>shared_ptr</code> forwards <code>ostream</code> output to the underlying pointer type, so this will affect <code>Ptr</code> output as well. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">os</td><td>Stream to print to. </td></tr>
    <tr><td class="paramname">serv</td><td>Object to serialize. May be null. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>os</code>. </dd></dl>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8cpp_source.html#l00128">128</a> of file <a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a>.</p>

<p class="reference">References <a class="el" href="asio_2server__socket_8cpp_source.html#l00047">async_task_engine_cref()</a>.</p>
<div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="classflow_1_1net__flow_1_1asio_1_1Server__socket_acbbe4fae58626a54fabdcd4bcdfdb011_cgraph.svg" width="384" height="59"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe>
</div>
</div>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ae236d96a176b209b217f04bb94119efe" name="ae236d96a176b209b217f04bb94119efe"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae236d96a176b209b217f04bb94119efe">&#9670;&nbsp;</a></span>m_target_task_engine</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflow_1_1util.html#ac3e89a8a271b0ddc76ac2a0ce488dea4">util::Task_engine</a>* flow::net_flow::asio::Server_socket::m_target_task_engine</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>See <a class="el" href="classflow_1_1net__flow_1_1asio_1_1Server__socket.html#a88c5b9b8fee3429f28d9f1dfbe1359c2" title="Pointer (possibly null) for the flow::util::Task_engine used by any coming async I/O calls and inheri...">async_task_engine()</a>. </p>

<p class="definition">Definition at line <a class="el" href="asio_2server__socket_8hpp_source.html#l00252">252</a> of file <a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a>.</p>

<p class="reference">Referenced by <a class="el" href="asio_2server__socket_8cpp_source.html#l00060">async_accept_impl()</a>, <a class="el" href="asio_2server__socket_8cpp_source.html#l00041">async_task_engine()</a>, <a class="el" href="asio_2server__socket_8cpp_source.html#l00047">async_task_engine_cref()</a>, and <a class="el" href="asio_2server__socket_8cpp_source.html#l00052">set_async_task_engine()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>net_flow/asio/<a class="el" href="asio_2server__socket_8hpp_source.html">server_socket.hpp</a></li>
<li>net_flow/asio/<a class="el" href="asio_2server__socket_8cpp_source.html">server_socket.cpp</a></li>
<li>net_flow/<a class="el" href="net__flow__fwd_8hpp_source.html">net_flow_fwd.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Mar 28 2025 22:55:36 for Flow by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4
</small></address>
</body>
</html>
